// #define THREADS_PER_WAVE 32
// #define AS_GROUP_SIZE THREADS_PER_WAVE

// #define CULL_FLAG 0x1
// #define MESHLET_FLAG 0x2

#ifdef __cplusplus
#include "Math/Math.h"
using float4x4 = SL::float4x4;
using float2 = SL::float2;
using float3 = SL::float3;
using float4 = SL::float4;
using int4 = SL::math::int4;
using uint = uint32_t;
#define ROW_MAJOR
#else
    #define ROW_MAJOR row_major
#endif

// #ifdef __cplusplus
// _declspec(align(256u))
// #endif
// struct Instance
// {
//     float4x4 World;
//     float4x4 WorldInvTrans;
//     float    Scale;
//     uint     Flags;
// };

#ifdef __cplusplus
_declspec(align(256u))
#endif
struct Constants
{
    ROW_MAJOR float4x4 View;
    ROW_MAJOR float4x4 ViewProj;
    ROW_MAJOR float4x4 InvView;
    ROW_MAJOR float4x4 InvProj;
    ROW_MAJOR float4x4 InvViewProj;
    float4 CameraPosTime;
    int4 WidthHeight;
    float4 ExposureKd;
    // float4      Planes[6];

    // float3      ViewPosition;
    // uint        HighlightedIndex;

    // float3      CullViewPosition;
    // uint        SelectedIndex;

    // uint        DrawMeshlets;
};